home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Software Vault: The Games Collection 1
/
software vault.zip
/
software vault
/
CDR10
/
TGE129C.ZIP
/
SOURCE
/
TGEMOUSE.ASM
< prev
next >
Wrap
Assembly Source File
|
1993-08-20
|
6KB
|
330 lines
; TGEMOUSE.ASM
; Assorted routines for interfacing to a Microsoft-compatible mouse driver.
; Copyright (c) 1993 by Matthew Hildebrand
; Turbo Assembler syntax
IDEAL
P486N ; 286 code, but we want 486 alignment
MODEL LARGE
CODESEG
; resets the mouse driver. Returns 1 if mouse installed, 0 if not
; int resetMouse(void);
PUBLIC C TGE_resetMouse
PROC C TGE_resetMouse
xor ax,ax
int 33h
cmp ax,0FFFFh
jne @@L1
mov ax,1
retcode
@@L1:
xor ax,ax
retcode
ENDP
; returns the number of buttons on the mouse
; CAUTION! Also resets the mouse
; int getButtonsMouse(void);
PUBLIC C TGE_getButtonsMouse
PROC C TGE_getButtonsMouse
xor ax,ax
int 33h
mov al,bl
xor ah,ah
retcode
ENDP
; shows the mouse pointer
; void showMouse(void);
PUBLIC C TGE_showMouse
PROC C TGE_showMouse
mov ax,1
int 33h
retcode
ENDP
; hides the mouse pointer
; void hideMouse(void);
PUBLIC C TGE_hideMouse
PROC C TGE_hideMouse
mov ax,2
int 33h
retcode
ENDP
; returns the current mouse (x,y) coordinates
; void getPosMouse(int far *x, int far *y);
PUBLIC C TGE_getPosMouse
PROC C TGE_getPosMouse
ARG x:DATAPTR, y:DATAPTR
mov ax,3
int 33h
les bx,[x]
mov [es:bx],cx
les bx,[y]
mov [es:bx],dx
leave
retcode
ENDP
; returns true if a button is pressed
; int buttonMouse(void);
PUBLIC C TGE_buttonMouse
PROC C TGE_buttonMouse
mov ax,3
int 33h
test bl,1
jz @@L1
mov ax,1
retcode
@@L1:
test bl,2
jz @@L2
mov ax,2
retcode
@@L2:
test bl,4
jz @@L3
mov ax,3
retcode
@@L3:
xor ax,ax
retcode
ENDP
; returns true if the left button is pressed
; int leftButtonMouse(void);
PUBLIC C TGE_leftButtonMouse
PROC C TGE_leftButtonMouse
mov ax,3
int 33h
test bl,1
jnz @@L1
xor ax,ax
retcode
@@L1:
mov ax,1
retcode
ENDP
; returns true if the right button is pressed
; int rightButtonMouse(void);
PUBLIC C TGE_rightButtonMouse
PROC C TGE_rightButtonMouse
mov ax,3
int 33h
test bl,2
jnz @@L1
xor ax,ax
retcode
@@L1:
mov ax,1
retcode
ENDP
; returns true if the center button is pressed
; int centerButtonMouse(void);
PUBLIC C TGE_centerButtonMouse
PROC C TGE_centerButtonMouse
mov ax,3
int 33h
test bl,4
jnz @@L1
xor ax,ax
retcode
@@L1:
mov ax,1
retcode
ENDP
; sets the position of the mouse pointer
; void setPosMouse(unsigned x,unsigned y);
PUBLIC C TGE_setPosMouse
PROC C TGE_setPosMouse
ARG x:WORD, y:WORD
mov ax,4
mov cx,[x]
mov dx,[y]
int 33h
leave
retcode
ENDP
; Returns the button press counter.
; unsigned buttonPressMouse(unsigned button, far *x, far *y);
PUBLIC C TGE_buttonPressMouse
PROC C TGE_buttonPressMouse
ARG button:WORD, x:DATAPTR, y:DATAPTR
mov ax,5
mov bx,[button]
dec bx
int 33h
mov ax,bx ; save press counter for return
les bx,[x]
mov [es:bx],cx ; x coordinate
les bx,[y]
mov [es:bx],dx ; y coordinate
leave
retcode
ENDP
; Returns the button release counter.
; unsigned buttonReleaseMouse(unsigned button, far *x, far *y);
PUBLIC C TGE_buttonReleaseMouse
PROC C TGE_buttonReleaseMouse
ARG button:WORD, x:DATAPTR, y:DATAPTR
mov ax,6
mov bx,[button]
dec bx
int 33h
mov ax,bx ; save release counter for return
les bx,[x]
mov [es:bx],cx ; x coordinate
les bx,[y]
mov [es:bx],dx ; y coordinate
leave
retcode
ENDP
; set the horizontal limits for the mouse pointer
; void setHorizLimitsMouse(unsigned min,unsigned max);
PUBLIC C TGE_setHorizLimitsMouse
PROC C TGE_setHorizLimitsMouse
ARG min:WORD, max:WORD
mov ax,7
mov cx,[min]
mov dx,[max]
; shl dx,1 ; adjust for mode 13h bug
int 33h
leave
retcode
ENDP
; set the vertical limits for the mouse pointer
; void setVertLimitsMouse(unsigned min,unsigned max);
PUBLIC C TGE_setVertLimitsMouse
PROC C TGE_setVertLimitsMouse
ARG min:WORD, max:WORD
mov ax,8
mov cx,[min]
mov dx,[max]
int 33h
leave
retcode
ENDP
; set the graphics pointer shape
; void setPointerMouse(int xoff,int yoff,void *p);
PUBLIC C TGE_setPointerMouse
PROC C TGE_setPointerMouse
ARG xOff:WORD, yOff:WORD, p:DATAPTR
mov ax,9
mov bx,[xOff]
mov cx,[yOff]
les dx,[p]
int 33h
leave
retcode
ENDP
; Returns the size of the mouse save state buffer
PUBLIC C TGE_getSaveSizeMouse
PROC C TGE_getSaveSizeMouse
mov ax,0015h
int 33h
mov ax,bx
retcode
ENDP
; Save the current state of the mouse driver
PUBLIC C TGE_saveStateMouse
PROC C TGE_saveStateMouse
ARG data:DATAPTR
mov ax,0016h
les dx,[data]
int 33h
leave
retcode
ENDP
; Restore the state of the mouse driver
PUBLIC C TGE_restoreStateMouse
PROC C TGE_restoreStateMouse
ARG data:DATAPTR
mov ax,0017h
les dx,[data]
int 33h
leave
retcode
ENDP
; Set the mickeys to pixels ratio (mickeys/8 pixels)
; void setRatioMouse(unsigned horiz, unsigned vert);
PUBLIC C TGE_setRatioMouse
PROC C TGE_setRatioMouse
ARG horiz:WORD, vert:WORD
mov ax,000Fh
mov cx,[horiz]
mov dx,[vert]
int 33h
leave
retcode
ENDP
; Get the mouse sensitivity (mickeys/8 pixels)
; void getSensitivityMouse(unsigned far *horiz, unsigned far *vert,
; unsigned far *doubleSpeed);
PUBLIC C TGE_getSensitivityMouse
PROC C TGE_getSensitivityMouse
ARG horiz:DATAPTR, vert:DATAPTR, doubleSpeed:DATAPTR
push di
mov ax,001Bh
int 33h
les di,[horiz]
mov [es:di],bx
les di,[vert]
mov [es:di],cx
les di,[doubleSpeed]
mov [es:di],dx
pop di
leave
retcode
ENDP
; same as resetMouse(), but no initialization of mouse hardware
; void softResetMouse(void);
PUBLIC C TGE_softResetMouse
PROC C TGE_softResetMouse
mov ax,21h
int 33h
retcode
ENDP
; waits for the specified button to be released before returning
; void waitReleaseMouse(int button);
PUBLIC C TGE_waitReleaseMouse
PROC C TGE_waitReleaseMouse
ARG button:WORD
dec [button]
@@L1:
mov ax,3
int 33h
mov cx,[button]
mov dx,1
shl dx,cl
and bx,dx
or bx,bx
jnz @@L1
leave
retcode
ENDP
ENDS
END